package h1.sismetro.negocio.itensManutencao;

import h1.sismetro.classesbasicas.Dispositivo;
import h1.sismetro.dao.RepositorioDispositivoJDBC;
import h1.sismetro.exceptions.AcessoAoBancoException;
import h1.sismetro.exceptions.ConexaoComBancoException;
import h1.sismetro.exceptions.DispositivoJaCadastradoException;
import h1.sismetro.exceptions.DispositivoNaoEncontradoException;
import h1.sismetro.exceptions.NenhumDispositivoCadastradoException;

import java.util.List;
/**
 * 
 * @author Paulo
 * @version 1.0
 */
public class CadastroDispositivo implements ICadastroDispositivo{

	private RepositorioDispositivoJDBC repositorio;
	
	/**
	 * Construtor Default
	 */
	public CadastroDispositivo(){
		 this.repositorio = new RepositorioDispositivoJDBC();
	}
	
	/**
	 * Construtor que carrega o repositorio com o repositorio passado.
	 * @param repositorio
	 */
	public CadastroDispositivo(RepositorioDispositivoJDBC repositorio){
		this.repositorio = repositorio;
	}
	
	
	//@Override
	public void alterar(Dispositivo novoDispositivo) throws DispositivoNaoEncontradoException, ConexaoComBancoException, AcessoAoBancoException {
		if(this.repositorio.existe(novoDispositivo.getIdentificador())){
			repositorio.atualizar(novoDispositivo);
		}else{
			DispositivoNaoEncontradoException e =
				new DispositivoNaoEncontradoException(novoDispositivo.getIdentificador());
			throw e;
		}				
	}

	
	//@Override
	public void cadastrar(Dispositivo novoDispositivo) throws DispositivoJaCadastradoException, ConexaoComBancoException, AcessoAoBancoException {
		if (!this.repositorio.existe(novoDispositivo.getIdentificador())){
			repositorio.inserir(novoDispositivo);
		}else{
			DispositivoJaCadastradoException e =
				new DispositivoJaCadastradoException(novoDispositivo.getIdentificador());
			throw e;
		}		
	}

	
	//@Override
	public boolean existe(String identificador) throws ConexaoComBancoException, AcessoAoBancoException {
		return repositorio.existe(identificador);
	}

	
	//@Override
	public Dispositivo recuperar(String identificador) throws ConexaoComBancoException, AcessoAoBancoException, DispositivoNaoEncontradoException {		
		if (this.repositorio.existe(identificador)){
			return repositorio.localizar(identificador);
		}else{
			DispositivoNaoEncontradoException e =
				new DispositivoNaoEncontradoException(identificador);
			throw e;
		}
	}

	
	//@Override
	public void excluir(String identificador) throws DispositivoNaoEncontradoException, ConexaoComBancoException, AcessoAoBancoException {
		if (this.repositorio.existe(identificador)){
			repositorio.remover(identificador);		
		}else{
			DispositivoNaoEncontradoException e =
				new DispositivoNaoEncontradoException(identificador);
			throw e;
		}
	}

	
	//@Override
	public List<Dispositivo> imprimir() throws ConexaoComBancoException, AcessoAoBancoException, NenhumDispositivoCadastradoException {		
		if (!(this.repositorio.listar().size() <= 0)){
			return repositorio.listar();
		}else{
			NenhumDispositivoCadastradoException e =
				new NenhumDispositivoCadastradoException();
			throw e;
		}
	}

}
